/**
 * 845. 数组中的最长山脉
 * https://leetcode-cn.com/problems/longest-mountain-in-array/
 */
public class Solutions_845 {
    public static void main(String[] args) {
//        int[] nums = {2, 1, 4, 7, 3, 2, 5};  // output: 5
//        int[] nums = {2, 2, 2};  // output: 0
        int[] nums = {0, 1, 2, 3, 4, 5, 4, 3, 2, 1, 0};  // output: 11

        int result = longestMountain(nums);
        System.out.println(result);
    }

    /**
     * 枚举山顶
     */
    public static int longestMountain(int[] A) {
        int res = 0;
        int len = A.length;
        if (len < 3) {
            return res;
        }
        // 索引 0 与 len - 1 上的元素不可能是“山脉”
        for (int i = 1; i < len - 1; i++) {
            if (A[i] > A[i - 1] && A[i] > A[i + 1]) {
                int count = 1;
                int j = i;
                // 该元素是山脉时，以 i 为中心，并向左向右扩展，计算“山脉”的长度
                while (j > 0 && A[j] > A[j - 1]) {
                    j --;
                    count ++;
                }
                j = i;
                while (j < len - 1 && A[j] > A[j + 1]) {
                    j ++;
                    count ++;
                }
                // 保存长度最大的“山脉”
                res = Math.max(res, count);
            }
        }
        return res;
    }
}
